Service Discovery を利用して Sysdig Serverless Orchestrator Agent の名前解決を行う
こんにちは! AWS 事業本部コンサルティング部のたかくに(@takakuni_)です。
Service Discovery を利用して、 Sysdig Serverless Orchestrator Agent をホストしてみようと思います
Sysdig Orchestrator Agent
Sysdig Serverless Orchestrator Agent(以後、Orchestrator Agent)は、 Sysdig serverless workload agent(以後、Workload Agent)とセットで利用され、 Workload Agent のテレメトリデータ集約し、 Sysdig SaaS エンドポイントに転送する役割を担います。
Workload Agent は、アプリケーションコンテナと同じ ECS サービス内のサイドカーコンテナとして起動し、 アプリケーションコンテナのシステムコールをトレースし、Orchestrator Agent へ転送します。
Orchestrator Agent の構成
Orchestrator Agent のデプロイは、 HashiCorp Terraform, AWS CloudFormation またはカスタムデプロイの 3 種類があります。
Terraform, CloudFormation では、ざっくり以下のリソースがデプロイされていきます。
- NLB
- Orchestrator Agent のエンドポイントを担う
- デフォルトでは 6,667 ポートの TCP リスナーが待ち受け
- ECS
- Orchestrator Agent コンテナをホストする
- AWS Fargate で起動可能
- AutoScaling Group
- 必要に応じてデプロイ可能
sysdiglabs/terraform-aws-fargate-orchestrator-agent
NLB が高くみえる
弊社、吉川が執筆した ECS on Fargate構成でのSysdig導入における全体費用感を把握してみよう をみると、 NLB のコストが全体の 35 % を占めており、少しばかり高く感じました。
- 前提
- 一ヶ月(31日)安定的にECSタスクが2台起動している
- Auto Scalingは使用しない
- 「Secure Workload Sec CaaS」のライセンスを2つ購入済み
- 利用費
- ライセンス費用
- 「Secure Workload Sec CaaS」の12ドル×2タスク分のライセンス=24ドル
- AWSリソース費用(固定費のみ)
- Orchestrator AgentECSタスクの約11~2ドル
- NLBの固定費部分約20ドル
- 合計費用
- 24ドル+12ドル+20ドル=約56ドル
ECS on Fargate構成でのSysdig導入における全体費用感を把握してみよう | DevelopersIO
要件を確認するに、 NLB じゃなくてもいいかもしれない。 Service Discovery で代替できないか?と思ったのが、今回のブログの意図です。
Manual Instrumentation | Sysdig Docs
Enable HTTP Proxy for Serverless Agents | Sysdig Docs
Service Discovery とは
Service Discovery とは、 ECS サービスの名前解決に利用するサービスです。 CloudMap を利用して Private Host Zone のレコードを動的に変更します。構成要素も少なく、シンプルな DNS クエリであればかなり便利な機能です。
ちなみに料金も非常にお手頃価格です。
- 0.10 USD/登録されたリソース (EC2 インスタンスなど)/月*
- 0.50 USD/ホストゾーン/月
- 0.40 USD/100 万件のクエリ – 初回の10 億件/月
Service Discovery で本当にいいのかは要検討
とてもシンプルで、料金もお手頃価格です。ただ次の項目は検討した後にご利用ください。
- トラフィック関連のメトリクスが提供されていない
- 基本的な DNS 回答しかできない
- ELB の CNAME および A レコードの複数値回答(8つまで)をサポート
- 位置情報ルーティングなどは未サポート
- クライアントの TTL 設定に依存する可能性あり
- ロードバランサーのようなリスナールールは設定できない
CON304_Exploring-service-discovery-options-with-Amazon-ECS-and-AWS-Fargate.pdf
やってみた
今回は以下の構成で Service Discovery を利用して Sysdig Serverless Orchestrator Agent の名前解決を行ってみようと思います。
利用したコードは以下になります。
Orchestrator Agent のホスト
今回は Terraform Module を新たに作り、ネームスペースを渡してあげる形で作成してみました。
作成したネームスペースも他のサービス間通信で使えると Service Discovery がより有効活用できますね。
############################################
# Service Discovery
############################################
resource "aws_service_discovery_private_dns_namespace" "this" {
name = "local"
vpc = module.vpc.vpc_id
}
############################################
# Fargate Orchestrator Agent
############################################
module "fargate_orchestrator_agent" {
source = "./modules/fargate_orchestrator_agent"
vpc_id = module.vpc.vpc_id
vpc_cidr = module.vpc.vpc_cidr_block
namespace_id = aws_service_discovery_private_dns_namespace.this.id
subnets = module.vpc.private_subnets
access_key = var.sysdig_access_key # Sysdig access key
collector_host = var.collector_host # Sysdig collector host (default:"collector.sysdigcloud.com")
collector_port = "6443" # Sysdig collector port (default:"6443")
name = "${var.prefix}-orchestrator" # Identifier for module resources
agent_image = "quay.io/sysdig/orchestrator-agent:latest" # Orchestrator agent image
assign_public_ip = false # Provisions a public IP for the service. Required when using an Internet Gateway for egress.
}
[/go]
モジュールの中身は、ただ NLB を消して Service Discovery を追加してあげました。 TTL の部分は柔軟に変えれるようにすると良さそうですね。
[go title="./modules/fargate_orchestrator_agent/service-discovery.tf"]
resource "aws_service_discovery_service" "this" {
name = "orchestrator-agent"
dns_config {
namespace_id = var.namespace_id
routing_policy = "MULTIVALUE"
dns_records {
ttl = 10
type = "A"
}
}
health_check_custom_config {
failure_threshold = 1
}
}
Sysdig コンソールからの確認
Sysdig コンソールで Orchestrator Agent および、 Workload Agent を認識しているか確認します。
1 台ずつの合計 2 台、認識されていました。
検知させてみる
最後に検知機能が正しく反応するか確認してみます。 ALB の DNS 名に HTTP でアクセスすると DVWA の画面に遷移するためそこからいくつか攻撃を実行してみます。
いくつかコマンドインジェクションを行った結果です。期待通り検知できていました。
まとめ
以上、「Service Discovery を利用して Sysdig Serverless Orchestrator Agent の名前解決を行う」でした。
小規模、中規模利用で NLB のコストが高くつきそうなお客様は是非ご検討いただけますと幸いです。
このブログがどなたかの参考になれば幸いです。 AWS 事業本部コンサルティング部のたかくに(@takakuni_)でした!